██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
CBC-MAC
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
In mwawcrittografia, un mwbaCipher Block Chaining Message Authentication Code, abbreviato mwbqCBC-MAC, è una tecnica per costruire un codice di mwbgautenticazione di messaggio usando un mwbwcifrario a blocchi. Il messaggio è crittografato con qualche algoritmo di crittografia a blocchi in modalità CBC per creare una catena di blocchi in cui ognuno di essi dipende dalla cifratura del blocco precedente. Questa interdipendenza assicura che un cambiamento ad un qualsiasi bit del testo in chiaro causerà un cambiamento nel blocco finale crittografato che non può essere predetto o calcolato senza conoscere la chiave di codifica.
Per calcolare il CBC-MAC del messaggio m si cripta m in modalità CBC con il mwcqvettore di inizializzazione a zero. La figura seguente mostra il calcolo del CBC-Mac di un messaggio diviso in blocchi mwcg m 1 ‖ ‖ m 2 ‖ ‖ … … ‖ ‖ m x {\displaystyle m_{1}\|m_{2}\|\dots \|m_{x}} usando una chiave segreta k e un cifrario a blocchi E.
mwda
Contents
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Sicurezza con messaggi di lunghezza fissa e variabile
Se il cifrario a blocchi impiegato è sicuro, CBC-MAC è sicuro per messaggi a lunghezza fissa. Tuttavia, di per sé, non è sicuro per messaggi a lunghezza variabile.
Detto tag il codice CBC-MAC di un messaggio mwfq m {\displaystyle m} , e indicato il tag con mwfg t {\displaystyle t} , un attaccante che conosce coppie messaggio-tag mwfw ( m , t ) {\displaystyle (m,t)} e mwga ( m ′ , t ′ ) {\displaystyle (m',t')} può generare un terzo messaggio mwgq m ″ {\displaystyle m''} il cui tag coincida con mwgg t ′ {\displaystyle t'} .
mwha m ″ {\displaystyle m''} può essere ottenuto come segue:
mwhw m ″ = m ‖ ‖ [ ( m 1 ′ ⊕ ⊕ t ) ‖ ‖ m 2 ′ ‖ ‖ … … ‖ ‖ m x ′ ] {\displaystyle m''=m\|[(m_{1}'\oplus t)\|m_{2}'\|\dots \|m_{x}']}
Il calcolo del CBC-MAC per il messaggio mwiq m ″ {\displaystyle m''} procede come segue:
1. viene calcolato il MAC fino a mwja m {\displaystyle m} , che equivale a mwjq t {\displaystyle t} : mwjg E K MAC ( m ) = t {\displaystyle E_{K_{\text{MAC}}}(m)=t}
2. viene calcolato il MAC del blocco mwka ( m 1 ′ ⊕ ⊕ t ) {\displaystyle (m_{1}'\oplus t)} , effettuando lo XOR del valore ottenuto al passo 1 con il primo blocco modificato di mwkq m ′ {\displaystyle m'} e quindi sottoponendo il risultato al cifrario a blocchi: mwkg E K MAC ( t ⊕ ⊕ ( m 1 ′ ⊕ ⊕ t ) ) {\displaystyle {\displaystyle E_{K_{\text{MAC}}}(t\oplus (m_{1}'\oplus t))}} per le proprietà di mwkw ⊕ ⊕ {\displaystyle \oplus } i due tag mwla t {\displaystyle t} si annullano, viene quindi eliminato il contributo di mwlq t {\displaystyle t} al MAC finora calcolato: mwlg E K MAC ( t ⊕ ⊕ ( m 1 ′ ⊕ ⊕ t ) ) = E K MAC ( m 1 ′ ⊕ ⊕ t ⊕ ⊕ t ) = E K MAC ( m 1 ′ ) {\displaystyle E_{K_{\text{MAC}}}(t\oplus (m_{1}'\oplus t))=E_{K_{\text{MAC}}}(m_{1}'\oplus t\oplus t)=E_{K_{\text{MAC}}}(m_{1}')}
3. continuando da mwma E K MAC ( m 1 ′ ) {\displaystyle E_{K_{\text{MAC}}}(m_{1}')} , si procede con il calcolo del MAC sui blocchi restanti mwmq m 2 ′ ‖ ‖ … … ‖ ‖ m x ′ {\displaystyle m_{2}'\|\dots \|m_{x}'} , che coincide dunque con il MAC di mwmg m ′ {\displaystyle m'} : mwmw E K MAC ( m ′ ) = t ′ {\displaystyle E_{K_{\text{MAC}}}(m')=t'} ottenendo pertanto mwna t ′ {\displaystyle t'} e quindi che il tag di mwnq m ″ {\displaystyle m''} coincide con mwng t ′ {\displaystyle t'} .
Questo problema non può essere risolto aggiungendo un blocco di lunghezza del messaggio (e.g., con Merkle-Damgård strengthening).
Utilizzo della stessa chiave per crittografare e autenticare
Un errore comune è riutilizzare la stessa chiave mwpg k {\displaystyle k} per la crittografia CBC e il CBC-MAC. Anche se un riutilizzo della chiave per scopi differenti è una pratica sconsigliata in generale, in questo caso particolare l'errore porta ad un attacco spettacolare.
Supponiamo che un utente effettui la crittografia di un messaggio mwqa m 0 ‖ ‖ m 1 ‖ ‖ ⋯ ⋯ ‖ ‖ m x − − 1 {\displaystyle m_{0}\|m_{1}\|\cdots \|m_{x-1}} in modalità CBC usando un IV mwqq c − − 1 {\displaystyle c_{-1}} ed ottenendo il seguente testo cifrato: mwqg c 0 ‖ ‖ c 1 ‖ ‖ ⋯ ⋯ ‖ ‖ c x − − 1 {\displaystyle c_{0}\|c_{1}\|\cdots \|c_{x-1}} , dove mwqw c i = E k ( m i ⊕ ⊕ c i − − 1 ) {\displaystyle c_{i}=E_{k}(m_{i}\oplus c_{i-1})} . Inoltre, genera il codice CBC-MAC per IV e per il messaggio: mwra t = M ( m − − 1 ‖ ‖ ⋯ ⋯ ‖ ‖ m x − − 1 ) . {\displaystyle t=M(m_{-1}\|\cdots \|m_{x-1}).} .
Adesso un attaccante può cambiare ogni bit prima dell'ultimo blocco mwrg c x − − 1 {\displaystyle c_{x-1}} e il codice MAC sarà ancora valido. La ragione è che mwrw t = E k ( m x − − 1 ⊕ ⊕ c x − − 2 ) = c x − − 1 {\displaystyle t=E_{k}(m_{x-1}\oplus c_{x-2})=c_{x-1}} (questa è in effetti la ragione per cui le persone commettono questo errore così frequentemente—ciò permette di incrementare le performance di un fattore pari a due). A meno che l'ultimo blocco non venga cambiato, l'equivalenza mwsa t = c x − − 1 {\displaystyle t=\ c_{x-1}} rimane valida, così il codice CBC-MAC risulta corretto.
Questo esempio mostra, inoltre, che un CBC-MAC non può essere usato come funzione monodirezionale mwsgresistente alle collisioni: data una chiave è banale creare un messaggio differente che generi lo stesso codice.
Voci correlate
Collegamenti esterni
• mwvg(EN) ISO/IEC 9797-2:2002, su iso.org.
• mwwa(EN) The security of the cipher block chaining message authentication code. (PDF), su cs.ucdavis.edu. URL consultato il 28 dicembre 2013 (archiviato dall'url originale il 5 febbraio 2012).